<?php
if ( ! defined('APPPATH')) exit('No direct script access allowed');
/**
 *          Đây là class thao tác với csdl chung cho các bảng dữ liệu thành phần
 *          ví dụ như categories, product, news...
 *          Các hàm có trong này bao gồm
 *              - listing() - xuất dữ liệu ra dạng mảng
 *              - add()     - thêm dữ liệu
 *              - edit()    - sửa dữ liệu
 *              - delete()  - xóa dữ liệu
 *              - các hàm khác cập nhật tiếp tục
 * 
 * */
class Common_model extends CI_Model{
    //Mảng quyền hạn
    var $permission = array();
    public function __construct(){
        parent::__construct();
        $this->load->database();
        $this->load->library('session');
    }
    /**
     * Hàm listing
     * @param :         $table      Tên bảng CSDL
     *                  $select     Chuỗi các trường cần select, cách nhau bởi dấu ","
     *                  $join       Mảng join, cấu trúc bao gồm tên bảng + điều kiện
     *                  $where      Chuỗi where, chấp nhận viết dạng chuỗi 'WHERE abc=def'
     *                              hoặc có thể dưới dạng mảng array('ten_truong'=>value)
     *                  $order      Mảng điều kiện order - bao gồm tên trường + điều kiện sắp xếp
     *               $limit_size    Số bản ghi limit
     *               $limit_start   Vị trí bắt đầu limit
     * @return          Mảng dữ liệu
     * */
    public function listing($table, $select = '*',$join = NULL,$where = '',$order = NULL,$limit_size = '',$limit_start = '',$distinct = false){
        //join = array('table'=>ten_bang, 'condition'=>dieu_kien,'type'=>kieu_join)
        //$order = array('order'=>ten_truong,'director'=>DESC or ASC or random)
        //$distinct = false or true
        if($distinct){
            $this->db->distinct();
        }
        $this->db->from($table);
        $this->db->select($select);
        if(is_array($join) && $join){
            $this->db->join($join['table'],$join['condition'],$join['type']);    
        }
        if($where){
            $this->db->where($where);    
        }
        if(is_array($order) && $order){
            $this->db->order_by($order['order'],$order['director']);    
        }
        if($limit_start){
            $this->db->limit($limit_start,$limit_end);
        }
        $query = $this->db->get();
        return $query->result_array();
    }
    /**
     * Hàm lấy 1 kết quả
     * */
    public function loadRow($sql){
        $query = $this->db->query($sql);
        return $query->row();
        
    }
    
    //Thêm dữ liệu
    public function add($table,$data){
        //$data = array('ten_truong'=>'values','ten_truong'=>'values','ten_truong'=>'values'...);
        if(!$this->permission['add']){
            return false;
        }
        return $this->db->insert($table,$data);
    }
    
    //Sửa dữ liệu
    public function edit($table,$data,$where=''){
        //check permission
        if(!$this->permission['edit']){
            return false;
        }
        //$data = array('ten_truong'=>'values','ten_truong'=>'values','ten_truong'=>'values'...);
        //$where =  'id = 4'
        return $this->db->update($table,$data,$where);
    }
    public function delete($table,$where){
        if(!$this->permission['delete']){
            return false;
        }
        return $this->db->delete($table,$where);
    }
}
?>